from leetcode_test import ListNode


"""
原来是全部放在一个数组里，后来知道可以用快慢指针，慢指针，一次走1格，快指针一次走2格

还在leetcode上看到奇葩的解答，把经过的节点改成一个特殊的，不会在测试用例的值，比如Symbol("xx") , "bjfuvth" 什么的
这种做法应该只有动态语言可以玩吧。

还有找出leetcode测试用例最长的，如果超过这个长度就是环，这奇葩解法。。。
"""
class Solution:
    def hasCycle(self, head: ListNode) -> bool:

        if not head or not head.next:
            return False
        slow = head
        fast = head.next
        while 1:
            if slow == fast:
                return True

            if fast and fast.next:
                slow = slow.next
                fast = fast.next.next
            else:
                return False


if __name__ == "__main__":
    list_node = ListNode.create([1,2,3,4,5,6,7])
    # list_node = ListNode.create_loop([1], 0)
    r = Solution().hasCycle(list_node)
    print(r)
